#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QWidget>
#include <QPushButton>
#include <QMainWindow>
#include <QStackedWidget>
#include <QHBoxLayout>
#include <SingleGame.h>
#include <MultiGame.h>
#include <netGame.h>

class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = nullptr);

    // 创建按钮区域
    void createButtonArea();
    // 创建堆栈窗口
    void createStackedWidget();
    // 连接按钮
    void connectButtons();
    // 显示指定索引的界面
    void showGamePage(int index);
    // 初始化返回按钮
    void setupBackButton();
    void clearStackedWidget();
    // 弹出阵营选择框
    bool popSideDialog();
    // 匹配对战展示本场说明
    bool showFieldExplain();
    void setupGameUI();
    void executeNetMatch();
    void initGame();
    void destroyGame();
    void matchSuccessToConfig(QString roomId, QString opponentId, bool isRed);

    // 按钮布局
    QScopedPointer<QWidget> buttonWidget;
    // 双人对战
    QScopedPointer<QPushButton> multiGameButton;
    // 人机对战
    QScopedPointer<QPushButton> singleGameButton;
    // 匹配对战
    QScopedPointer<QPushButton> netGameButton;
    // 堆栈容器
    QScopedPointer<QStackedWidget> stackedWidget;
    // 返回按钮
    QScopedPointer<QPushButton> backButton;
    QScopedPointer<NetGame> netGame;
    QScopedPointer<MultiGame> multiGame;
    QScopedPointer<SingleGame> singleGame;
    QScopedPointer <QHBoxLayout> mainLayout;
    QScopedPointer<QWidget> centralWidget;

signals:
private slots:
    // 显示返回确认对话框
    void showBackConfirm();
    // 返回主菜单
    void returnToMainMenu();

};

#endif // MAINWINDOW_H
